import random
"""创建一个空字典来存储所有账户信息"""
accounts = {}
"""存储分支银行信息"""
branches = {
    "001": "北京分行",
    "002": "上海分行",
    "003": "广州分行",
    "004": "深圳分行",
    "005": "成都分行",
    "006": "杭州分行",
    "007": "武汉分行",
    "008": "南京分行",
    "009": "西安分行"
}


# 检查账户是否存在
def has_account(account):
    return account in accounts


# 判断用户密码是否正确
def check_password(account, password):
    """检查密码是否正确"""
    if accounts[account]["密码"] == password:
        return True
    else:
        print("密码错误，请重新输入。")
        return False


# 存钱
def save_money(account):
    if not has_account(account):
        print("账户不存在，请先开户。")
        return
    """获取用户的密码,如果错误重新输入"""
    while True:
        password = input("请输入您的密码:")
        if check_password(account, password):
            break
    """获取用户输入的存款金额"""
    while True:
        try:
            amount = float(input("请输入存款金额:"))
            if amount > 0:
                break
            else:
                print("存款金额必须大于0，请重新输入。")
        except ValueError:
            print("无效的金额，请输入数字。")
    """更新账户余额"""
    accounts[account]["用户余额"] += amount
    print(f"存款成功，当前账户余额为: {accounts[account]['用户余额']}")


# 取钱
def withdraw_money(account):
    if not has_account(account):
        print("账户不存在，请先开户。")
        return
    """获取用户的密码,如果错误重新输入"""
    while True:
        password = input("请输入您的密码:")
        if check_password(account, password):
            break
    """获取用户输入的取款金额"""
    while True:
        try:
            amount = float(input("请输入取款金额:"))
            if 0 < amount <= accounts[account]["用户余额"]:
                break
            elif amount <= 0:
                print("取款金额必须大于0，请重新输入。")
            else:
                print("取款金额超过账户余额，请重新输入。")
        except ValueError:
            print("无效的金额，请输入数字。")
    """更新账户余额"""
    accounts[account]["用户余额"] -= amount
    print(f"取款成功，当前账户余额为: {accounts[account]['用户余额']}")


# 转账
def transfer_money(from_account):
    if not has_account(from_account):
        print("账户不存在，请先开户。")
        return
    """获取用户的密码,如果错误重新输入"""
    while True:
        password = input("请输入您的密码:")
        if check_password(from_account, password):
            break
    """获取用户输入的目标账户和转账金额"""
    to_account = input("请输入目标账户号码:")
    if not has_account(to_account):
        print("目标账户不存在，请检查后重新输入。")
        return
    while True:
        try:
            amount = float(input("请输入转账金额:"))
            if 0 < amount <= accounts[from_account]["用户余额"]:
                break
            elif amount <= 0:
                print("转账金额必须大于0，请重新输入。")
            else:
                print("转账金额超过账户余额，请重新输入。")
        except ValueError:
            print("无效的金额，请输入数字。")
    """更新两个账户的余额"""
    accounts[from_account]["用户余额"] -= amount
    accounts[to_account]["用户余额"] += amount
    print(f"转账成功，当前账户{from_account}余额为: {accounts[from_account]['用户余额']}")
    print(f"目标账户{to_account}余额为: {accounts[to_account]['用户余额']}")


# 查询账户信息
def query_account(account):
    if not has_account(account):
        print("账户不存在，请先开户。")
        return
    """获取用户的密码,如果错误重新输入"""
    while True:
        password = input("请输入您的密码:")
        if check_password(account, password):
            break
    """打印账户信息"""
    account_info = accounts[account]
    print(f"账户号码: {account}")
    print(f"账户类型: {account_info['账户类型']}")
    print(f"用户名: {account_info['用户名']}")
    print(f"用户地址: {account_info['用户地址']}")
    print(f"用户余额: {account_info['用户余额']}")
    print(f"分支银行: {account_info['分支银行']}")


# 创建一个新的银行账户
def add_account():
    while True:
        """生成一个8位数的随机账户号码，并判断是否已存在于accounts字典中"""
        account = str(random.randint(10000000, 99999999))
        if has_account(account):
            break
        """获取用户输入的账户信息"""
        account_type = input("请输入账户类型金卡或普通卡(1/2):")
        username = input("请输入用户名:")
        while True:
            password = input("请输入密码(6位):")
            if len(password) == 6:
                break
            else:
                print("密码长度不符合要求，请重新输入。")
        user_address = input("请输入用户地址(国家,省份,街道,门牌号):")
        user_balance = 0.0
        """用户从branches选择分支银行"""
        print("请选择分支银行:")
        for code, name in branches.items():
            print(f"{code}: {name}")
        branch_code = str(input("请输入分支银行代码:"))
        while branch_code not in branches:
            print("无效的分支银行代码，请重新输入。")
            branch_code = str(input("请输入分支银行代码:"))
        branch_name = branches[branch_code]
        """将新账户信息存储到字典中"""
        accounts[account] = {
            "账户类型": account_type,
            "用户名": username,
            "密码": password,
            "用户地址": user_address,
            "用户余额": user_balance,
            "分支银行": branch_name
        }
        print(f"恭喜您开户成功,您的账户号码是: {account}")
        break


while True:
    print("***********************************")
    print("*       中国农业银行账户管理系统       *")
    print("***********************************")
    print("*               选项               *")
    print("*              1.开户              *")
    print("*              2.存钱              *")
    print("*              3.取钱              *")
    print("*              4.转账              *")
    print("*              5.查询              *")
    print("*              6.Bye              *")
    print("***********************************")
    choice = input("请输入您的选择:")
    if choice == '1':
        print("开户功能")
        # 在这里添加开户的逻辑
        add_account()
    elif choice == '2':
        print("存钱功能")
        # 在这里添加存钱的逻辑
        save_money(input("请输入您的账户号码:"))
    elif choice == '3':
        print("取钱功能")
        # 在这里添加取钱的逻辑
        withdraw_money(input("请输入您的账户号码:"))
    elif choice == '4':
        print("转账功能")
        # 在这里添加转账的逻辑
        transfer_money(input("请输入您的账户号码:"))
    elif choice == '5':
        print("查询功能")
        # 在这里添加查询的逻辑
        query_account(input("请输入您的账户号码:"))
    elif choice == '6':
        print("谢谢使用，再见！")
        break
    else:
        print("无效的选项，请重新输入。")
